package br.gov.sjc.aluguelsocial;

import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.ListView;
import br.gov.sjc.adapter.BeneficioAdapter;
import br.gov.sjc.classes.NumeroSias;
import br.gov.sjc.classes.Beneficio;
import br.gov.sjc.dao.BeneficioDAO;
import br.gov.sjc.utils.Sair2;

public class BeneficioMainAct extends Sair2{
	String TAG = "BeneficioMainAct";
	private static final int INCLUIR = 0;
	private static final int ALTERAR = 1;
	private BeneficioDAO lBeneficioDAO;// inst�ncia responsável pela persist�ncia
	// dos dados
	List<Beneficio> lstBeneficio;// lista de dados cadastrados no BD
	public static BeneficioAdapter adapter; // Adapter responsável por apresentar
	// os dados na tela

	boolean blnShort = false;
	int Posicao = 0; // determinar a Posição do TrabalhoOFR dentro da lista
	// lstTrabalhoOFR
	// Pega o numero do Sias em uso atual
	NumeroSias ns = new NumeroSias();
	int NumSias = ns.getNumeroDaFamilia();
	int idMembroSias = ns.getNumeroDoMembroDaFamilia();

	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.beneficio_lv);
		registerBaseActivityReceiver();

			lBeneficioDAO = new BeneficioDAO(this);
			lBeneficioDAO.open();
			Log.w(TAG.toString(), "lBeneficioDAO.open();");
			lstBeneficio = lBeneficioDAO.Consultar(NumSias);
			Log.w(TAG.toString(), "lBeneficioDAO.Consultar: " + NumSias + "/"
					+ idMembroSias);
			adapter = new BeneficioAdapter(this, lstBeneficio);
			Log.w(TAG.toString(),
					" adapter = new BeneficioAdapter(this, lstBeneficio); ");
			setListAdapter(adapter);
			Log.w(TAG.toString(), " setListAdapter(adapter); ");

			registerForContextMenu(getListView());
			Log.w(TAG.toString(), " setListAdapter(adapter); ");
	}
	public void btnBeneficioNovo_click(View view) {
		try {
			//InserirBeneficio();
		} catch (Exception e) {
			Log.e(TAG, "btnBeneficioNovo_click - Erro : " + e.getMessage());
		}
	}

	public void btnBeneficioVoltar_click(View view) {
		try {
			Intent ittTIr = new Intent(getApplicationContext(),
					TelefoneMainAct.class);
			setResult(Activity.RESULT_CANCELED);
			startActivity(ittTIr);

			finish();
		} catch (Exception e) {
			Log.e(TAG, "btnBeneficioVoltar_click - Erro : " + e.getMessage());
		}
	}

	public void btnBeneficioIr_click(View view) {
		try {
			// Quando for simplesmente cancelar a opera��o de inclusão
			// ou altera��o deve-se apenas informar o RESULT_CANCELED
			// e em seguida finalizar a Activity
			
			Intent ittTIr = new Intent(getApplicationContext(),
					GrupoFamiliarActivity.class);
			setResult(Activity.RESULT_CANCELED);
			startActivity(ittTIr);
			finish();
		} catch (Exception e) {
			Log.e(TAG, "btnBeneficioIr_click - Erro : " + e.getMessage());
		}
	}
	
	// Rotina executada quando finalizar a Activity TrabalhoAct
		@Override
		protected void onActivityResult(int requestCode, int resultCode, Intent data) {
			Beneficio lBeneficio = null;

			try {
				super.onActivityResult(requestCode, resultCode, data);
				if (resultCode == Activity.RESULT_OK) {
					// obtem dados inseridos/alterados na Activity trabalho
					lBeneficio = (Beneficio) data.getExtras().getSerializable(
							"beneficio");

					Log.w(TAG.toString(), " INCLUIR == " + INCLUIR);

					// o valor do requestCode foi definido na fun��o
					// startActivityForResult
					if (requestCode == INCLUIR) {
						// verifica se digitou algo no valor
						if (!lBeneficio.getPrograma().equals("")) {
							// necessário abrir novamente o BD pois ele foi fechado
							// no método onPause()
							lBeneficioDAO.open();

							// insere o contato no Banco de Dados SQLite
							lBeneficioDAO.inserir(lBeneficio);

							// insere o contato na lista de contatos em mem�ria
							lstBeneficio.add(lBeneficio);
						}
						Log.w(TAG.toString(), " ALTERAR == " + ALTERAR);

					} else if (requestCode == ALTERAR) {
						lBeneficioDAO.open();
						// atualiza o contato no Banco de Dados SQLite
						lBeneficioDAO.alterar(lBeneficio);

						// atualiza o contato na lista de contatos em mem�ria
						lstBeneficio.set(Posicao, lBeneficio);
					}

					// método responsável pela atualiza da lista de dados na tela
					adapter.notifyDataSetChanged();
				}
			} catch (Exception e) {
				Log.w(TAG.toString(), "Exception ALTERAR == " + ALTERAR);
				Log.w(TAG.toString(), "Exception INCLUIR == " + INCLUIR);

				Log.e(TAG, "onActivityResult - Erro : " + e.getMessage());
			}
		}/**/

		private void InserirBeneficio() {
			try {
				// a vari�vel "tipoT" tem a fun��o de definir o comportamento da
				// Activity
				// ContatoUI, agora a vari�vel tipo está definida com o valor "0"
				// para
				// informar que ser� uma inclusão de Contato

				Intent it = new Intent(this, BeneficioAct.class);
				it.putExtra("tipoT", INCLUIR);
				startActivityForResult(it, INCLUIR);// chama a tela e inclusão
				Log.w(TAG, "startActivityForResult INCLUIR == " + INCLUIR);
			} catch (Exception e) {
				Log.e(TAG, "InserirBeneficio - Erro : " + e.getMessage());
			}
		}
		
		@Override
		protected void onResume() {
			// quando a Activity main receber o foco novamente abre-se novamente a
			// conexão
			lBeneficioDAO.open();
			// método responsável pela atualiza da lista de dados na tela
			adapter.notifyDataSetChanged();
			super.onResume();
		}

		@Override
		protected void onPause() {
			// toda vez que o programa peder o foco fecha-se a conexão com o BD
			lBeneficioDAO.close();
			super.onPause();
		}
		
		/*@Override
		public void onCreateContextMenu(ContextMenu menuT, View v,
				ContextMenuInfo menuInfoT) {
			try {
				// Criação do popup menu com as op��es que termos sobre
				// nossos Telefones

				AdapterView.AdapterContextMenuInfo infoT = (AdapterView.AdapterContextMenuInfo) menuInfoT;
				if (!blnShort) {
					Posicao = infoT.position;
				}
				blnShort = false;
				Log.w(TAG, "onCreateContextMenu Posicao:" + Posicao);
				menuT.setHeaderTitle("Selecione:");
				// a origem dos dados do menu está definido no arquivo arrays.xml
				String[] menuTItems = getResources().getStringArray(R.array.menu);
				for (int i = 0; i < menuTItems.length; i++) {
					menuT.add(Menu.NONE, i, i, menuTItems[i]);
				}
				Log.w(TAG, "onCreateContextMenu Terminou");

			} catch (Exception e) {
				Log.e(TAG, "onCreateContextMenu - Erro : " + e.getMessage());
			}
		}*/

		// Este método � disparado quando o usu�rio clicar em um item do ContextMenu
		@Override
		public boolean onContextItemSelected(MenuItem item) {
			Beneficio lBeneficio = null;
		/*	try {
				int menuItemIndex = item.getItemId();

				// Carregar a inst�ncia POJO com a Posição selecionada na tela
				lBeneficio = (Beneficio) getListAdapter().getItem(Posicao);

				if (menuItemIndex == 0) {
					// Carregar a Activity ContatoUI com o registro selecionado na
					// tela

					Intent it = new Intent(this, BeneficioAct.class);
					it.putExtra("tipoT", ALTERAR);
					it.putExtra("beneficio", lBeneficio); 
					startActivityForResult(it, ALTERAR); // chama a tela de
					// altera��o
					// método responsável pela atualiza da lista de dados na tela
					adapter.notifyDataSetChanged();
				} else if (menuItemIndex == 1) {
					// Excluir do Banco de Dados e da tela o registro selecionado

					lBeneficioDAO.Excluir(lBeneficio);
					lstBeneficio.remove(lBeneficio);
					adapter.notifyDataSetChanged(); // atualiza a tela
				}
			} catch (Exception e) {
				Log.e(TAG, "Erro : " + e.getMessage());
			}*/
			return true;

		}

		@Override
		protected void onListItemClick(ListView l, View v, int position, long id) {
			try {
				Log.w(TAG, "onListItemClick position:" + position + " id:" + id
						+ " v:" + v.toString());
				super.onListItemClick(l, v, position, id);
				// por padr�o o ContextMenu, s� � executado atrav�s de LongClick,
				// mas
				// nesse caso toda vez que executar um ShortClick, abriremos o menu
				// e tamb�m guardaremos qual a Posição do itm selecionado

				Posicao = position;
				blnShort = true;
				//this.openContextMenu(l);
			} catch (Exception e) {
				Log.e(TAG,
						"onListItemClick ERRO :" + e.getMessage() + "/"
								+ e.getCause());

			}
			Log.i(TAG, "onListItemClick fim");
		}

		@Override
		protected void onDestroy() {
			super.onDestroy();
			unRegisterBaseActivityReceiver();
		}
}

